import os
import shutil
from pathlib import Path

from opencc import OpenCC

class FileProcessor:
    """
    将指定目录及其子目录下所有文件的文件名从繁体中文转换为简体中文。
    如果转换后的文件名已存在，则直接覆盖。
    """


    def __init__(self, input_dir):
        self.logger = None
        self.input_dir = Path(input_dir)

    def run(self):
        """
        将指定目录及其子目录下所有文件的文件名从繁体中文转换为简体中文。
        如果转换后的文件名已存在，则直接覆盖。
        """
        # 初始化 OpenCC 转换器，使用繁体到简体的配置
        cc = OpenCC('t2s')  # t2s 表示繁体到简体

        # 遍历目录及其所有子目录
        for root, dirs, files in os.walk(self.input_dir):
            for filename in files:
                # 获取文件的完整路径
                old_file_path = os.path.join(root, filename)

                # 分离主文件名和扩展名
                name_part, ext_part = os.path.splitext(filename)

                # 将主文件名部分从繁体转换为简体
                simplified_name_part = cc.convert(name_part)
                # 重新组合为完整的新文件名
                new_filename = f"{simplified_name_part}{ext_part}"
                new_file_path = os.path.join(root, new_filename)

                # 只有当新旧文件名不同时才进行重命名
                if old_file_path != new_file_path:
                    try:
                        # 使用 shutil.move 覆盖已存在的文件
                        shutil.move(old_file_path, new_file_path)
                        print(f"成功重命名并覆盖: 【{filename}】 -> 【{new_filename}】")
                    except Exception as e:
                        print(f"重命名文件失败: {old_file_path}. 错误信息: {e}")
                else:
                    # 如果文件名转换后没有变化，则跳过
                    print(f"无需重命名: 【{filename}】 (已是简体或无变化)")
